过渡:从 FunctionCall 到 DeepAgent
1.1 FunctionCall 的局限
在上一讲的 FunctionCall 阶段,我们学会了让 LLM 调用工具:
from langchain.tools import tool
@tool
def get_weather(city: str) -> str:
"""获取城市天气"""
return f"{city}的天气是晴天"
# LLM 收到用户问题后,决定调用这个函数
💡 关键思考:类型提示 (Type Hinting) 的重要性 你可能注意到了
def get_weather(city: str)中的: str。这不仅仅是注释,而是给 Agent 的"硬性约束"。
- 现状:在 DeepAgent 中,我们只用简单的 Python 基本类型(str, int)。
- 预告:但在处理复杂的金融数据时(比如要求输出严格的 JSON 格式),光靠
str是不够的。在**下一讲(NLP 自然语言处理)**中,我们将引入 Pydantic 库,它能像"模具"一样,强迫 Agent 输出精准的结构化数据,而不是随意的自然语言。
但 FunctionCall 存在明显局限:
| 问题 | 描述 |
|---|---|
| 单步执行 | 只能执行单个工具调用,无法处理复杂任务 |
| 无记忆能力 | 每次对话都是全新的,无法记住用户偏好 |
| 缺乏规划 | 不会主动分解任务、制定步骤 |
| 工具固定 | 新增工具需要修改代码,灵活性差 |
1.2 DeepAgent 的解决方案
DeepAgent 在 FunctionCall 的基础上,引入了五大核心能力,形成一个完整的 Agent 系统:
核心能力说明:
-
Planning(规划能力):Agent 能够自动分解复杂任务为多个步骤,制定执行计划
-
Memory(记忆系统):跨会话持久化存储,记住用户偏好和上下文
-
SubAgent(子代理):支持专业化的子代理,处理特定领域任务
-
Backend(后端):提供文件系统访问能力,支持工具读取、写入和搜索文件
-
Skills(技能):通过类似目录一样的渐进式披露,传入指定的工作流程并减少上下文开销
这五种能力建立在 FunctionCall Agent 的基础之上,使 DeepAgent 从"被动回答问题"升级为"主动完成任务"的智能代理。